////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  aecstartup.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AECSTARTUP_H
#define AECSTARTUP_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "globalelements.h"
#include "aecglobalelements.h"

#define AECSTARTUP_NAMESPACE_BEGIN namespace aecStartUp {
#define AECSTARTUP_NAMESPACE_END }

AECSTARTUP_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// StartUpArbitrationType
///
/// Description:   Exposure table indices for start up convergence algorithms
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct StartUpArbitrationType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// expTableIDAggressive
    ///
    /// Tuning Level:  often_tune
    /// Description:   Index of exposure table to use during AggressiveAEC convergence
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::ExposureTableIDType expTableIDAggressive;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// expTableIDFastAEC
    ///
    /// Tuning Level:  often_tune
    /// Description:   Index of exposure table to use during FastAEC convergence
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::ExposureTableIDType expTableIDFastAEC;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// WarmStartUpConvType
///
/// Description:   Warm Start Up loads uses exposure settings from previous camera session (if available) as the first
///                exposure for new session
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct WarmStartUpConvType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enableWarmStartUp
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Enable warm start up feature
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    BOOL  enableWarmStartUp;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// startExpIndexRangePct
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Percentage of the exposure index table range that can be used as a start index when using warm startup.
    ///                If exposure index from previous session falls outside of this range it will be clipped into range
    /// Range:         [50,100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT startExpIndexRangePct;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GenericStartUpConvType
///
/// Description:   Initial exposure and startup speed settings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct GenericStartUpConvType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// startExpIndex
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Default start exposure index
    /// Range:         [0,500]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT startExpIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// startUpAggressiveness
    ///
    /// Tuning Level:  rarely_tune
    /// Description:   Convergence speed during start up
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT startUpAggressiveness;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// StartUpConvergenceType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct StartUpConvergenceType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// generic
    ///
    /// Description:   Initial exposure and startup speed settings
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    GenericStartUpConvType generic;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// warmStartUp
    ///
    /// Description:   Warm Start Up loads uses exposure settings from previous camera session (if available) as the first
    ///                exposure for new session
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    WarmStartUpConvType    warmStartUp;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// fastAEC
    ///
    /// Description:   Tuning settings for initial convergence algorithms: FastAEC and AggressiveAEC
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::RapidConvType          fastAEC;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// aggressive
    ///
    /// Description:   Tuning settings for initial convergence algorithms: FastAEC and AggressiveAEC
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    aecglobalelements::RapidConvType          aggressive;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECStartUpType
/// Comments:       Startup Tuning Definition
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct AECStartUpType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
        INT32 incr_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// StartUpConv
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    StartUpConvergenceType StartUpConv;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// StartUpArb
    ///
    /// Description:   Exposure table indices for start up convergence algorithms
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    StartUpArbitrationType StartUpArb;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// AECStartUpTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class AECStartUpTypeClass : public ParameterModule, public AECStartUpType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 1;
    static const UINT16 MINOR = 0;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECStartUpTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    AECStartUpTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~AECStartUpTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load StartUpArbitrationType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadStartUpArbitrationType(
        ParameterFileSymbolTableEntry* entry,
        StartUpArbitrationType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load WarmStartUpConvType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadWarmStartUpConvType(
        ParameterFileSymbolTableEntry* entry,
        WarmStartUpConvType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load GenericStartUpConvType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadGenericStartUpConvType(
        ParameterFileSymbolTableEntry* entry,
        GenericStartUpConvType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load StartUpConvergenceType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadStartUpConvergenceType(
        ParameterFileSymbolTableEntry* entry,
        StartUpConvergenceType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load AECStartUpType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadAECStartUpType(
        ParameterFileSymbolTableEntry* entry,
        AECStartUpType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        AECStartUpType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class AECStartUpTypeClass

AECSTARTUP_NAMESPACE_END
#endif // AECSTARTUP_H

